home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
rhstdlib.arc
/
GETS.ASM
< prev
next >
Wrap
Assembly Source File
|
1990-10-20
|
2KB
|
93 lines
stdlib segment para public 'slcode'
assume cs:stdlib
;
extrn sl_malloc:far, sl_realloc:far
extrn sl_putc:far, sl_getc:far
;
;
; GETS- Reads a line of text from the user and returns a pointer to the
; string read. Returns the pointer in ES:DI. Carry=0 if no error,
; 1 if heap overflow.
;
; The returned string is zero terminated and does not include the
; carriage return (ENTER) key code.
;
; Note: This routine always allocates 256 bytes when you call
; it.
;
;
;
;
public sl_gets
sl_gets proc far
push ax
push bx
push cx
pushf
;
; Allocate storage for return string:
;
mov cx, 256
call sl_malloc
jc BadGETS
;
; Read data from keyboard until the user hits the enter key.
;
xor bx, bx
RdKbdLp: call sl_getc
cmp al, 08 ;Backspace
jne NotBS
or bx, bx ;Don't do it if at
jz RdKbdLp ; beginning of line.
dec bx
call sl_putc
jmp RdKbdLp
;
NotBS: cmp al, 13 ;See if ENTER.
jnz NotCR
call sl_putc
mov al, 0ah
call sl_putc
mov byte ptr es:[bx][di], 0
inc bx
jmp GetsDone
;
NotCR: cmp al, 1bh ;ESC
jne NotESC
mov al, 8
EraseLn: call sl_putc
dec bx
jne EraseLn
jmp RdKbdLp
;
NotESC: mov es:[bx][di], al
call sl_putc
inc bx
cmp bx, 255
jb RdKbdLp
mov al, 7 ;Bell
call sl_putc
dec bx
jmp RdKbdLp
;
; Deallocate any left over storage:
;
GetsDone: mov cx, bx
call sl_realloc
popf
clc
pop cx
pop bx
pop ax
ret
;
BadGETS: popf
stc
pop cx
pop bx
pop ax
ret
sl_gets endp
stdlib ends
end